#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Todo 应用演示脚本

此脚本演示如何使用 Todo 应用的核心功能
"""

import sys
import os
from datetime import datetime

# 添加项目根目录到 Python 路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from models.task import Task, Priority, TaskStatus
from models.task_manager import TaskManager
from utils.storage import Storage


def demo_task_operations():
    """演示任务操作"""
    print("=== Todo 应用功能演示 ===")
    print()
    
    # 创建任务管理器
    task_manager = TaskManager()
    
    print("1. 添加任务")
    # 添加一些示例任务
    task1 = task_manager.add_task(
        "完成项目文档",
        "编写项目的技术文档和用户手册",
        Priority.HIGH
    )
    
    task2 = task_manager.add_task(
        "学习 PyQt5",
        "深入学习 PyQt5 的高级功能",
        Priority.MEDIUM
    )
    
    task3 = task_manager.add_task(
        "整理代码",
        "重构和优化现有代码",
        Priority.LOW
    )
    
    print(f"已添加 {len(task_manager)} 个任务")
    print()
    
    print("2. 显示所有任务")
    for task in task_manager.get_all_tasks():
        print(f"- {task.title} [{task.priority.value}] ({task.status.value})")
        if task.description:
            print(f"  描述: {task.description}")
        print(f"  创建时间: {task.created_at.strftime('%Y-%m-%d %H:%M:%S')}")
        print()
    
    print("3. 完成一个任务")
    task_manager.toggle_task_status(task2.id)
    print(f"任务 '{task2.title}' 已标记为完成")
    print()
    
    print("4. 更新任务")
    task_manager.update_task(
        task1.id,
        title="完成项目文档和演示",
        description="编写项目的技术文档、用户手册和准备演示材料"
    )
    print(f"任务 '{task1.title}' 已更新")
    print()
    
    print("5. 按状态筛选任务")
    pending_tasks = task_manager.get_pending_tasks()
    completed_tasks = task_manager.get_completed_tasks()
    
    print(f"待完成任务 ({len(pending_tasks)} 个):")
    for task in pending_tasks:
        print(f"- {task.title} [{task.priority.value}]")
    
    print(f"\n已完成任务 ({len(completed_tasks)} 个):")
    for task in completed_tasks:
        print(f"- {task.title} [{task.priority.value}]")
    print()
    
    print("6. 按优先级筛选任务")
    high_priority_tasks = task_manager.get_tasks_by_priority(Priority.HIGH)
    print(f"高优先级任务 ({len(high_priority_tasks)} 个):")
    for task in high_priority_tasks:
        print(f"- {task.title} ({task.status.value})")
    print()
    
    print("7. 任务统计")
    stats = task_manager.get_task_count()
    print(f"总任务数: {stats['total']}")
    print(f"待完成: {stats['pending']}")
    print(f"已完成: {stats['completed']}")
    print()
    
    print("8. 数据持久化演示")
    storage = Storage("demo_data", "demo_tasks.json")
    
    # 保存数据
    data = task_manager.to_dict()
    if storage.save(data):
        print("任务数据已保存到文件")
    
    # 创建新的任务管理器并加载数据
    new_task_manager = TaskManager()
    loaded_data = storage.load()
    new_task_manager.from_dict(loaded_data)
    
    print(f"从文件加载了 {len(new_task_manager)} 个任务")
    print()
    
    print("9. 清理演示")
    # 删除一个任务
    task_manager.delete_task(task3.id)
    print(f"已删除任务 '{task3.title}'")
    
    # 清除已完成任务
    cleared_count = task_manager.clear_completed_tasks()
    print(f"已清除 {cleared_count} 个已完成任务")
    
    final_stats = task_manager.get_task_count()
    print(f"最终任务统计: 总计 {final_stats['total']}, 待完成 {final_stats['pending']}, 已完成 {final_stats['completed']}")
    
    print("\n=== 演示完成 ===")


def demo_task_model():
    """演示任务模型功能"""
    print("\n=== 任务模型演示 ===")
    
    # 创建任务
    task = Task("示例任务", "这是一个示例任务的描述", Priority.HIGH)
    print(f"创建任务: {task}")
    
    # 转换为字典
    task_dict = task.to_dict()
    print(f"任务字典: {task_dict['title']} - {task_dict['priority']}")
    
    # 从字典创建任务
    new_task = Task.from_dict(task_dict)
    print(f"从字典恢复: {new_task}")
    
    # 标记完成
    new_task.mark_completed()
    print(f"标记完成后: {new_task.status.value}")
    
    print("=== 任务模型演示完成 ===")


if __name__ == "__main__":
    demo_task_model()
    demo_task_operations()